<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自己的promise</title>
    <script src="./kpromise.js"></script>
</head>
<body>
    
</body>
<script type="module">
// import KPromise from './kpromise.js';
// 1->3->5->2->4
// console.log(111);
// setTimeout(() => {
//     console.log(222);
// });
// let p = new KPromise((resolve,reject)=>{
//     // console.log(333);
//     // setTimeout(() => {
//         resolve("success");
//     // }, 1000);
//     // reject("err");
// });
// console.log(p);
// 一.三种状态 
// 基本then: 1.同步执行？---》执行顺序问题 then保存函数 然后 resolve、reject执行函数； 解决：内部延迟执行；
// p.then(res=>{
//     console.log(res);
// },err=>{
//     console.log(err);
// })
// 2.微任务和宏任务问题？
// p.then((res)=>{
//     console.log("444",res);
// })
// console.log(555);

// 二.then：1多个then? 2链式? 3.返还值处理 ?
// 1.多个then ？？ --》数组保存且执行
// let p = new KPromise(res=>{
//     res("success");
// })
// p.then(res=>{
//     console.log(1,res);
// })
// p.then(res=>{
//     console.log(2,res);
// })
// 2.链式操作？？   返还新实例化对象
// let p = new KPromise(res=>{
//     res("success");
// })
// let p2 =  p.then(res=>{
//     // 返还普通值
//     // return 111;
//     // 返还promise
//     return new KPromise(res=>{
//         res("返还promise值");
//     })
// })
// // console.log(p2);
// p2.then(res=>{
//     console.log(res);
// })

// 三、周边方法； Promise.resolve reject race allSettled catch.. 
// resolve reject
// let p = KPromise.resolve("success");
// console.log(p);
// let p = KPromise.reject("err");
// console.log(p);
// race
// let p1 = new KPromise((res,rej)=>{
//     setTimeout(() => {
//         // res("p1");
//         rej('err');
//     }, 2000);
// })
// let p2 = new KPromise((res,rej)=>{
//     setTimeout(() => {
//         res("p2");
//         // rej("err p2");
//     }, 1000);
// })
// KPromise.race([p1,p2]).then(res=>{
//     console.log(res);
// },err=>{
//     console.log(err);
// })
// p1.then(res=>{
//     console.log(res);
// }).catch(err=>{
//     console.log("catch",err);
// })

// allSettled
// let p1 = new KPromise((res,rej)=>{
//     setTimeout(() => {
//         res("p1");
//     }, 2000);
// })
// let p2 = new KPromise((res,rej)=>{
//     setTimeout(() => {
//         rej("p2err");
//     }, 1000);
// })
// KPromise.allSettled([p1,p2]).then(res=>{
//     console.log(res);
// })

// 作业 ：finally（注意执行顺序）  和 all（静态）

//all
let p1 = new KPromise((res,rej)=>{
    setTimeout(() => {
        res("p1");
    }, 2000);
})
// let p2 = new KPromise((res,rej)=>{
//     setTimeout(() => {
//         rej("p2err");
//     }, 1000);
// })
let p2 = new KPromise((res,rej)=>{
    setTimeout(() => {
        res("p2");
    }, 1000);
})


KPromise.all([p1,p2]).then(res=>{
    console.log(res);
}
)
</script>
</html>